/**
 * 弹出窗口核心
 */
MyWindow={
//--------------------------按钮-------------------------- 

//--------------------------配置--------------------------	
	defaultWidth : 805,//宽度基数默认
	defaultHeight : 595,//高度基数默认
	defaultTitle : (typeof(systemTitle)!="undefined"?systemTitle:'通易Web框架'),//标题默认
	defaultType : 'success',//提示类型默认
	defaultTimer　: 1500,//自动关闭毫秒数默认
	defaultTips　: '小提示:',//文本框上方的小提示默认
	defaultTextType　: 'text',// 文本类型默认
	/**
	 * 按钮回调函数
	 * @param container 弹出窗口容器
	 * @param id 弹出窗口id
	 * @param action 按钮事件名称
	 * @param text 按钮操作名称
	 * @param confirm: 按钮操作前确认消息
	 * @param message: 按钮操作成功提示消息
	 * @param opener 弹出窗口window对象
	 * @param source 弹出位置的窗口	 
	 * @param returnValue 弹出窗口返回值
	 * @return void
	 */	
	defaultCallback : function(parameters){//按钮默认回调函数
//			alert(action+":"+id);
//			alert("defaultCallback");
			var forms=parameters.opener.document.body.getElementsByTagName("FORM");
			if(forms.length!=1){//检查窗口中的表单数量
				MyWindow.error({
					content : '当前窗口表单数目为【'+forms.length+'】，系统要求仅且一个表单，请与系统管理员联系！',
					title : '错误框',
					container : parameters.container					
				});
				return ;				
			}
//			alert(forms[0].id);			
			var arguments={
					container : parameters.container,
					id : parameters.id,
					action : parameters.action,
					text : parameters.text,
					confirm : parameters.confirm,
					message : parameters.message,
					opener : parameters.opener,
					source : parameters.source,
					returnValue : parameters.returnValue
				};			
			//先调用表单初始化函数
		    var initializeSubmit=parameters.opener.initializeSubmit;
			if(initializeSubmit==null){//有设置特殊的表单初始化
				initializeSubmit=MyWindow.defaultInitializeSubmit;
			}
			if(!initializeSubmit(arguments)){//调用表单初始化函数
				return;
			}
			//然后调用表单验证函数			
			var validateSubmit=parameters.opener.validateSubmit;
			if(validateSubmit==null){
				validateSubmit=MyWindow.defaultValidateSubmit;
			}
			if(!validateSubmit(arguments)){//验证通过
				return;
			}
			var beforeSubmit=function(formData, jqForm, options){//表单提交前的回调函数
				var isTrue=true;
				var arguments={
						container : parameters.container,
						id : parameters.id,
						action : parameters.action,
						text : parameters.text,
						confirm : parameters.confirm,
						message : parameters.message,
						opener : parameters.opener,
						source : parameters.source,
						returnValue : parameters.returnValue,
						formData : formData, 
						jqForm : jqForm, 
						options : options
					};
				if(parameters.opener.beforeSubmit){//调用页面上提交前的钩子函数
					isTrue=isTrue && MyWindow.defaultBeforeSubmit(arguments)&& parameters.opener.beforeSubmit(arguments);
				}else{//调用默认提交前的钩子函数
					isTrue=isTrue && MyWindow.defaultBeforeSubmit(arguments);					
				}
				return isTrue;
			};
			var success=function(responseText, statusText, xhr, jqForm){//表单提交后的回调函数
				var isTrue=true;
				var arguments={
						container : parameters.container,
						id : parameters.id,
						action : parameters.action,
						text : parameters.text,
						confirm : parameters.confirm,
						message : parameters.message,
						opener : parameters.opener,
						source : parameters.source,
						returnValue : parameters.returnValue,
						responseText : responseText, 
						statusText : statusText, 
						xhr : xhr, 
						jqForm : jqForm
					};
				if(parameters.opener.postSubmit){//调用页面上提交后的钩子函数
					isTrue=isTrue && parameters.opener.postSubmit(arguments);
				}else{//调用默认的提交后的钩子函数
					isTrue=isTrue && MyWindow.defaultPostSubmit(arguments);
				}
				if(isTrue){//关闭窗口
					MyWindow.close(parameters.id,parameters.container);
				}				
			};
			var error=function(data){//表单提交失败的回调函数
				MyWindow.tips({
					content : '程序执行错误，请与系统管理员联系！错误信息如下：<br>'+data.responseText,
					title : '错误框',
					type : 'error',
					container : parameters.container					
				});
				unloading();
			};
			var options = {//ajaxSubmit表单提交配置
					        //target:        '#'+forms[0].id+'',   // target element(s) to be updated with server response 
					        beforeSubmit:  beforeSubmit,  // pre-submit callback 
					        success:       success,  // post-submit callback 
					        error:  error,
					        // other available options: 
					        //url:       url         // override for form's 'action' attribute 
					        type:      'post',        // 'get' or 'post', override for form's 'method' attribute 
					        dataType:  'json',        // 'xml', 'script', or 'json' (expected server response type) 
					        //clearForm: true        // clear all form fields after successful submit 
					        //resetForm: true        // reset the form after successful submit 
					        // $.ajax options can be used here too, for example: 
					        timeout:   30000 
			    }; 	  			
			if(parameters.confirm!=null&&parameters.confirm!=""){//确认提交过程
				MyWindow.confirm({
					content : '你确实要【'+parameters.confirm+'】吗？',
					title : '确认框',
					container : parameters.container,
					callback : function(action){
						if(action != 'ok'){//不是点击的确定
							return ;
						}
						$(forms[0]).ajaxSubmit(options);//调用ajaxSubmit表单提交
					}
				});			
			}else{//不用确认直接提交
				$(forms[0]).ajaxSubmit(options);//调用ajaxSubmit表单提交			
			}
	},
	/**
	 * 表单提交前初始化函数
	 * @param container 弹出窗口容器
	 * @param id 弹出窗口id
	 * @param action 按钮事件名称
	 * @param text 按钮操作名称
	 * @param confirm: 按钮操作前确认消息
	 * @param message: 按钮操作成功提示消息 
	 * @param opener 弹出窗口window对象
	 * @param source 弹出位置的窗口	 
	 * @param returnValue 弹出窗口返回值
	 * @return void  true:继续提交  false:停止提交
	 */	
	defaultInitializeSubmit : function(parameters){//按钮默认回调函数
//		alert("defaultInitializeSubmit");	
		return true;
	},	
	/**
	 * 表单提交前验证函数
	 * @param container 弹出窗口容器
	 * @param id 弹出窗口id
	 * @param action 按钮事件名称
	 * @param text 按钮操作名称
	 * @param confirm: 按钮操作前确认消息
	 * @param message: 按钮操作成功提示消息
	 * @param opener 弹出窗口window对象
	 * @param source 弹出位置的窗口	 
	 * @param returnValue 弹出窗口返回值
	 * @param jqForm jquery包装后的form						 
	 * @param options XMLHttpRequest
	 * @return boolean true:继续提交  false:停止提交						 
	 */		
	defaultValidateSubmit : function(parameters){//按钮默认回调函数
//		alert("defaultValidateSubmit");	
		return true;
	},	
	/**
	 * 表单提交前回调函数
	 * @param container 弹出窗口容器
	 * @param id 弹出窗口id
	 * @param action 按钮事件名称
	 * @param text 按钮操作名称
	 * @param confirm: 按钮操作前确认消息
	 * @param message: 按钮操作成功提示消息	 
	 * @param opener 弹出窗口window对象
	 * @param source 弹出位置的窗口	 
	 * @param returnValue 弹出窗口返回值
	 * @param jqForm jquery包装后的form						 
	 * @param options XMLHttpRequest
	 * @return boolean true:继续提交  false:停止提交						 
	 */		
	defaultBeforeSubmit : function(parameters){//按钮默认回调函数
//		alert("defaultBeforeSubmit");
		loading("<br><br><img src='"+getContextPath()+"/image/loading.gif' ><br>我正在努力处理中，请耐心等待...<br><br>");
		return true;
	},	
	/**
	 * 表单提交后回调函数
	 * @param container 弹出窗口容器
	 * @param id 弹出窗口id
	 * @param action 按钮事件名称
	 * @param text 按钮操作名称
	 * @param confirm: 按钮操作前确认消息
	 * @param message: 按钮操作成功提示消息	 
	 * @param opener 弹出窗口window对象
	 * @param source 弹出位置的窗口	 
	 * @param returnValue 弹出窗口返回值
	 * @param responseText 调用返回内容
	 * @param statusText 调用状态
	 * @param xhr XMLHttpRequest
	 * @param jqForm jquery包装后的form
	 * @return boolean true:关闭窗口  false:不关闭窗口
	 */		
	defaultPostSubmit : function(parameters){//按钮默认回调函数
//		alert("defaultPostSubmit");
		var result=parameters.responseText.result=='success';
		var message=parameters.responseText.message;
		if(message==null||message==""){//返回值不存在
			message=parameters.message;
		}
		if(message==null||message==""){//按钮没有配置
			message="【"+parameters.text+"】操作成功!";
		}
		if(result){
			MyWindow.tips({
				content : message,
				title : '成功框',
				type : 'success',
				container : parameters.container					
			});	
			try{//刷新列表
				parameters.source.fisherReload();
			}catch(e){}	
			unloading();	
		}else{
			MyWindow.error({
				content : message,
				title : '错误框',
				type : 'error',
				container : parameters.container					
			});	
			unloading();		
		}
		return result;
	},	
//--------------------------接口--------------------------	
	/**
	 * 弹出窗口
	 * @param title 窗口标题[可选]，默认为defaultTitle
	 * @param url 加载的url
	 * @param source 弹出位置的窗口
	 * @param buttons 窗口操作按钮[可选]
	 * @param multiplewidth 窗口倍宽[可选]，默认为1倍宽
	 * @param multipleheight 窗口倍长[可选]，默认为1倍长
	 * @param tipstitle 提示栏标题[可选]
	 * @param tipscontent 提示栏内容[可选]
	 * @param container 窗口容器[可选]，默认为top
	 * @return void
	 */	
	open : function(parameters){
		var url=parameters.url;
		var source=parameters.source;
		if(url==null){
			MyWindow.error({
				content : '未设置路径[url]，请与系统管理员联系!',
				title : '错误框',
				container : parameters.container					
			});	
		}else if(source==null){
			MyWindow.error({
				content : '未设置弹出位置的窗口[window]，请与系统管理员联系!',
				title : '错误框',
				container : parameters.container					
			});	
		}else {
			var title=parameters.title;
			if(title==null){//窗口标题没有配置
				title=MyWindow.defaultTitle;
			}
			var multiplewidth=parameters.multiplewidth;		
			if(multiplewidth==null){//窗口倍宽没有配置
				multiplewidth=1;
			}	
			var multipleheight=parameters.multipleheight;
			if(multipleheight==null){//窗口倍长没有配置
				multipleheight=1;
			}
			var container=parameters.container;
			if(container==null){//窗口容器没有配置
				container=top;
			}			
		   var width=MyWindow.defaultWidth*multiplewidth;
		   //alert(width+":"+$(top.window).width() );
		   if(width>$(top.window).width() ){//防止窗口超过浏览器宽度
		   		width=$(top.window).width() ;
		   }
		   var height=MyWindow.defaultHeight*multipleheight;
		   //alert(height+":"+$(top.window).height() );
		   if(height>$(top.window).height() ){//防止窗口超过浏览器高度
		   		height=$(top.window).height() ;	
		   }	
			var btnsbar=new Array();//操作按钮
			var callback=function(action,opener,returnValue){//按钮调用函数，默认只处理右上角的关闭
							if(action=="close"){//点击窗口右上角的关闭窗口
								if(confirm("确认要关闭吗？")){
									MyWindow.close(this.id,container);
									return false;
								}else{
									return false;
								}								
							}			
				};
			if(parameters.buttons!=null && parameters.buttons.length!=0){
				for(var i=0;i<parameters.buttons.length;i++){
					btnsbar[btnsbar.length]={
						text : parameters.buttons[i].text,
						action : parameters.buttons[i].action
					}
				}
				callback=function(action,opener,returnValue){
					if(action!="close"&&(opener==null||opener.document==null||opener.document.readyState!="complete")){//防止窗口没有加载完毕
						MyWindow.error({
							content : '窗口正在加载中，请加载完毕后再进行操作！',
							title : '错误框',
							container : parameters.container					
						});							
						return false;
					}
					for(var i=0;i<parameters.buttons.length;i++){//调用各个按钮自己的回调函数
						if(action==parameters.buttons[i].action){
							var options={
									container : container,
									id : this.id,
									action : parameters.buttons[i].action,
									text : parameters.buttons[i].text,
									confirm : parameters.buttons[i].confirm,
									message : parameters.buttons[i].message,
									opener : opener,
									source : parameters.source,
									returnValue : returnValue
								};
							if(parameters.buttons[i].callback!=null){//有设置按钮回调函数则调用按钮上的
								parameters.buttons[i].callback(options);//调用按钮回调函数							
							}else{//没有设置按钮回调函数则调用默认的
								MyWindow.defaultCallback(options);//调用按钮回调函数
							}
							return false;
						}	
					}
					if(action=="close"){//点击窗口右上角的关闭窗口
						if(confirm("确认要关闭吗？")){
							MyWindow.close(this.id,container);
							return false;
						}else{
							return false;
						}
					}else{//未注册的操作按钮
						MyWindow.error({
							content : '未处理的按钮类型【'+action+'】，请与系统管理员联系！',
							title : '错误框',
							container : parameters.container					
						});							
					}
				}
			}	
			var tipsbar=null;
			if(parameters.tipscontent!=null && parameters.tipscontent!=''){//提示栏内容有则设置提示栏内容
				var tipstitle="";
				if(parameters.tipstitle!=null && parameters.tipstitle!=''){
					tipstitle=parameters.tipstitle;
				}
				var tipscontent=parameters.tipscontent;
				tipsbar={
					title : tipstitle,
					content : tipscontent
				}
			}	
			var options={//asyncbox弹出窗口配置
				title : title,
				url : parameters.url,
		　　　	width : width,
		　　　	height : height,
				reset : true,
				flash : true,
				drag : true,
				modal : true,
				reset : true,
				fixed : true,
				scroll : 'auto',
				cache : false,
				tipsbar : tipsbar,			
				callback : callback
			};
			if(btnsbar!=null&&btnsbar.length!=0){//按钮存在，则添加
				options.btnsbar=btnsbar;
			}
			container.asyncbox.open(options);//调用asyncbox的弹出窗口
		}
	},
	/**
	 * 重载[重定向]指定窗口内容页
	 * @param container 弹出窗口容器
	 * @param id 弹出窗口id
	 * @param action 按钮事件名称
	 * @param text 按钮操作名称
	 * @param confirm: 按钮操作前确认消息
	 * @param message: 按钮操作成功提示消息 
	 * @param opener 弹出窗口window对象
	 * @param source 弹出位置的窗口	 
	 * @param returnValue 弹出窗口返回值
	 * @param url 连接地址
	 * @return void
	 */		
	reload : function(parameters,url){
		if(url==null){
			MyWindow.error({
				content : '未设置路径[url]，请与系统管理员联系!',
				title : '错误框',
				container : parameters.container					
			});	
		}else {	
			var container=parameters.container;
			if(container==null){//窗口容器没有配置
				container=top;
			}	
			parameters.opener.location.reload(url)
			//container.asyncbox.reload(parameters.id,url);
		}
	},
	/**
	 * 关闭窗口
	 * @param id 窗口ID
	 * @param container 窗口容器[可选]，默认为top
	 * @return void
	 */		
	close : function(id,container){	
		if(container==null){//窗口容器没有配置
			container=top;
		}
		container.asyncbox.close(id); 		
	},
	/**
	 * 警报框
	 * @param title 窗口标题[可选]，默认为defaultTitle
	 * @param content 窗口内容
	 * @param container 窗口容器[可选]，默认为top
	 * @param callback 回调函数[可选]
	 * @return void
	 */		
	alert : function(parameters){
		var content=parameters.content;
		if(content==null){//窗口标题没有配置
			alert("未设置内容[content]，请与系统管理员联系!");
			return ;
		}	
		var title=parameters.title;
		if(title==null){//窗口标题没有配置
			title=MyWindow.defaultTitle;
		}	
		var container=parameters.container;
		if(container==null){//窗口容器没有配置
			container=top;
		}
		var callback=parameters.callback;
		container.asyncbox.alert(content,title,callback);//调用asyncbox的警报框
	},	
	/**
	 * 确认框
	 * @param title 窗口标题[可选]，默认为defaultTitle
	 * @param content 窗口内容
	 * @param container 窗口容器[可选]，默认为top
	 * @param callback 回调函数[可选]
	 * @return void
	 */		
	confirm : function(parameters){
		var content=parameters.content;
		if(content==null){//窗口标题没有配置
			alert("未设置内容[content]，请与系统管理员联系!");
			return ;
		}	
		var title=parameters.title;
		if(title==null){//窗口标题没有配置
			title=MyWindow.defaultTitle;
		}	
		var container=parameters.container;
		if(container==null){//窗口容器没有配置
			container=top;
		}
		var callback=parameters.callback;
		container.asyncbox.confirm(content,title,callback);//调用asyncbox的警报框
	},	
	/**
	 * 成功框
	 * @param title 窗口标题[可选]，默认为defaultTitle
	 * @param content 窗口内容
	 * @param container 窗口容器[可选]，默认为top
	 * @param callback 回调函数[可选]
	 * @return void
	 */		
	success : function(parameters){
		var content=parameters.content;
		if(content==null){//窗口标题没有配置
			alert("未设置内容[content]，请与系统管理员联系!");
			return ;
		}	
		var title=parameters.title;
		if(title==null){//窗口标题没有配置
			title=MyWindow.defaultTitle;
		}	
		var container=parameters.container;
		if(container==null){//窗口容器没有配置
			container=top;
		}
		var callback=parameters.callback;
		container.asyncbox.success(content,title,callback);//调用asyncbox的警报框
	},	
	/**
	 * 错误框
	 * @param title 窗口标题[可选]，默认为defaultTitle
	 * @param content 窗口内容
	 * @param container 窗口容器[可选]，默认为top
	 * @param callback 回调函数[可选]
	 * @return void
	 */		
	error : function(parameters){
		var content=parameters.content;
		if(content==null){//窗口标题没有配置
			alert("未设置内容[content]，请与系统管理员联系!");
			return ;
		}	
		var title=parameters.title;
		if(title==null){//窗口标题没有配置
			title=MyWindow.defaultTitle;
		}	
		var container=parameters.container;
		if(container==null){//窗口容器没有配置
			container=top;
		}
		var callback=parameters.callback;
		container.asyncbox.error(content,title,callback);//调用asyncbox的警报框
	},	
	/**
	 * 参数框
	 * @param title 窗口标题[可选]，默认为defaultTitle
	 * @param tips　文本框上方的小提示[可选]，默认为defaultTips
	 * @param content 窗口内容
	 * @param textType 文本类型[可选]，默认为defaultTextType
	 * @param container 窗口容器[可选]，默认为top	 
	 * @param callback 回调函数[可选]
	 * @return void
	 */		
	prompt : function(parameters){
		var content=parameters.content;
		if(content==null){//窗口标题没有配置
			alert("未设置内容[content]，请与系统管理员联系!");
			return ;
		}	
		var title=parameters.title;
		if(title==null){//窗口标题没有配置
			title=MyWindow.defaultTitle;
		}	
		var tips=parameters.tips;
		if(tips==null){//文本框上方的小提示没有配置
			tips=MyWindow.defaultTips;
		}	
		var textType=parameters.tips;
		if(textType==null){//文本类型没有配置
			textType=MyWindow.defaultTextType;
		}				
		var container=parameters.container;
		if(container==null){//窗口容器没有配置
			container=top;
		}
		var callback=parameters.callback;
		container.asyncbox.prompt(title,tips,content,textType,callback);//调用asyncbox的警报框
	},		
	/**
	 * 警告框
	 * @param title 窗口标题[可选]，默认为defaultTitle
	 * @param content 窗口内容
	 * @param container 窗口容器[可选]，默认为top
	 * @param callback 回调函数[可选]
	 * @return void
	 */		
	warning : function(parameters){
		var content=parameters.content;
		if(content==null){//窗口标题没有配置
			alert("未设置内容[content]，请与系统管理员联系!");
			return ;
		}	
		var title=parameters.title;
		if(title==null){//窗口标题没有配置
			title=MyWindow.defaultTitle;
		}	
		var container=parameters.container;
		if(container==null){//窗口容器没有配置
			container=top;
		}
		var callback=parameters.callback;
		container.asyncbox.warning(content,title,callback);//调用asyncbox的警报框
	},	
	/**
	 * 提示框
	 * @param type　 窗口标题[可选]，默认为defaultTitle
	 * @param content 窗口内容
	 * @param container 窗口容器[可选]，默认为top
	 * @param callback 回调函数[可选]
	 * @return void
	 */		
	tips : function(parameters){
		var content=parameters.content;
		if(content==null){//窗口标题没有配置
			alert("未设置内容[content]，请与系统管理员联系!");
			return ;
		}	
		var type　=parameters.type　;
		if(type　==null){//提示类型没有配置
			type=MyWindow.defaultType;
		}	
		var timer　=parameters.timer　;
		if(timer　==null){//自动关闭毫秒数没有配置
			timer=MyWindow.defaultTimer;
		}		
		var container=parameters.container;
		if(container==null){//窗口容器没有配置
			container=top;
		}
		container.asyncbox.tips(content,type,timer);//调用asyncbox的警报框
	}			
}

//xl   2012-05-22 附件使用   通用上传适配器
function AsyncBox_Upload_Adapter(id,title,url,data,height,iframe,width){
　   var windowWidth = 760;
	var windowHeight = 500;
	if(width!=null)
	{
		windowWidth = width;
	}
	
	if(height!=null)
	{
		windowHeight = height;
	}
	
	asyncbox.open({
        id : id,
        title:title,
　　    　url : url,
		data : data,
　　    　width : windowWidth,
　　    　height : windowHeight
	});
}